//
// Created by shkstart on 2023/9/1.
// 测试：二维数组中指针的使用:使用数组名访问数组元素

#include <stdio.h>


int main() {
    /*
     * 复习：
     * int a[] = {1,2,3,4,5};
     * printf("%p\n",a); //获取a[0]的地址
     * printf("%p\n",&a); //获取a数组的地址
     * */


    int a[3][4] = {{1, 2,  3,  4},
                   {5, 6,  7,  8},
                   {9, 10, 11, 12}};

    printf("%d\n",a[0][0]); //1
    printf("%p\n",&a[0][0]); //获取a[0][0]元素数据值对应的地址值
    printf("%p\n",a[0]); //获取a[0][0]的地址值
    printf("%p\n",a);    //获取a[0]的地址值
    printf("%p\n",&a);    //获取二维数组a的地址值

    /*
     * 讨论：使用数组名，表示数组中各个相关元素的地址、值
     *
     * 前提：
     * &a   ：  二维数组a的地址值
     * a    ：  获取a[0]的地址值
     * a[0] ： 获取a[0][0]的地址值
     *
     * 讨论1：a[0][0]相关的
     * a[0][0]的地址：&a[0][0],a[0],*a
     * a[0][0]的值：a[0][0],*(a[0]),*(*a))
     *
     *
     * 讨论2：a[1]相关的
     * a[1]的地址：&a[1],a+1
     *
     * 讨论3：a[1][0]相关的
     * a[1][0]的地址：&a[1][0],a[1],*(a+1)
     * a[1][0]的值：a[1][0],*(a[1]),*(*(a+1))
     *
     * 讨论4：a[1][2]相关的
     * a[1][2]的地址：&a[1][2],a[1]+2,*(a+1)+2
     * a[1][2]的值：a[1][2],*(a[1]+2),*(*(a+1)+2)
     * */

    return 0;
}